package edu.upc.inmobiliaria.repository.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

import edu.upc.inmobiliaria.domain.TipoInmueble;
import edu.upc.inmobiliaria.repository.TipoInmuebleRepository;

@Repository
public class JdbcTipoInmuebleRepository implements TipoInmuebleRepository {
	private SimpleJdbcTemplate simpleJdbcTemplate;

	@Autowired
	public JdbcTipoInmuebleRepository(DataSource dataSource) {
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}

	@Override
	public boolean registrar(TipoInmueble tipoInmueblebean, String idusuario) {
		try {
			String sql = "INSERT INTO T_TIPOINMUEBLE (ID,DESCRIPCION) VALUES (?,?)";
			this.simpleJdbcTemplate.update(sql, tipoInmueblebean.getId(),
					tipoInmueblebean.getDescripcion());
			return true;
		} catch (DataAccessException e) {
			return false;
		}
	}

	@Override
	public boolean actualizar(TipoInmueble tipoInmueblebean, String idusuario) {
		try {
			String sql = "UPDATE T_TIPOINMUEBLE SET DESCRIPCION=? WHERE ID=?";
			this.simpleJdbcTemplate
					.update(sql, tipoInmueblebean.getDescripcion(),
							tipoInmueblebean.getId());
			return true;
		} catch (DataAccessException e) {
			return false;
		}
	}

	@Override
	public boolean eliminar(int id, String idusuario) {
		try {
			String sql = "DELETE FROM T_TIPOINMUEBLE WHERE ID=?";
			this.simpleJdbcTemplate.update(sql, id);
			return true;
		} catch (DataAccessException e) {
			return false;
		}
	}

	@Override
	public TipoInmueble getTipoInmueble(int id) {
		TipoInmueble tipoinmueble = null;
		try {
			String sql = "SELECT ID,DESCRIPCION FROM T_TIPOINMUEBLE WHERE ID=?";
			RowMapper<TipoInmueble> mapper = new RowMapper<TipoInmueble>() {
				public TipoInmueble mapRow(ResultSet rs, int rowNum)
						throws SQLException {
					int id = rs.getInt("ID");
					String descripcion = rs.getString("DESCRIPCION");
					TipoInmueble tipoinmueble = TipoInmueble.crearTipoInmueble(
							id, descripcion);
					return tipoinmueble;
				}
			};

			tipoinmueble = this.simpleJdbcTemplate.queryForObject(sql, mapper,
					id);
		} catch (EmptyResultDataAccessException ex) {
			return null;
		}
		return tipoinmueble;
	}

}
